@@ -1,5 +1,7 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +import json  | 
            |
| 4 | 
                +  | 
            |
| 3 | 5 | 
                from django.conf import settings  | 
            
| 4 | 6 | 
                from django.db import transaction  | 
            
| 5 | 7 | 
                from django_logit import logit  | 
            
                @@ -8,14 +10,16 @@ from django_response import response  | 
            ||
| 8 | 10 | 
                from account.models import UserInfo  | 
            
| 9 | 11 | 
                from coupon.models import CouponInfo, UserCouponInfo  | 
            
| 10 | 12 | 
                from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo  | 
            
| 11 | 
                -from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo  | 
            |
| 13 | 
                +from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo, AdministratorInfo  | 
            |
| 14 | 
                +from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerSubmitLogInfo  | 
            |
| 12 | 15 | 
                from member.models import RightInfo  | 
            
| 13 | 16 | 
                from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo,  | 
            
| 14 | 17 | 
                DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,  | 
            
| 15 | 18 | 
                SaleclerkSaleStatisticInfo, SaleStatisticInfo)  | 
            
| 19 | 
                +from utils.error.errno_utils import AdministratorStatusCode  | 
            |
| 16 | 20 | 
                 | 
            
| 17 | 21 | 
                 | 
            
| 18 | 
                -def exec_del_clerk_sale_submit(pk):  | 
            |
| 22 | 
                +def exec_del_clerk_sale_submit(pk, admin_id):  | 
            |
| 19 | 23 | 
                try:  | 
            
| 20 | 24 | 
                ssli = SaleclerkSubmitLogInfo.objects.select_for_update().get(pk=pk)  | 
            
| 21 | 25 | 
                except SaleclerkSubmitLogInfo.DoesNotExist:  | 
            
                @@ -66,6 +70,15 @@ def exec_del_clerk_sale_submit(pk):  | 
            ||
| 66 | 70 | 
                clerk.integral -= integral  | 
            
| 67 | 71 | 
                clerk.total_integral -= integral  | 
            
| 68 | 72 | 
                clerk.save()  | 
            
| 73 | 
                +  | 
            |
| 74 | 
                + #记录删除日志  | 
            |
| 75 | 
                + StaffDeleteClerkSaleSubmitLogInfo.objects.create(  | 
            |
| 76 | 
                + admin_id=admin_id,  | 
            |
| 77 | 
                + log_pk=pk,  | 
            |
| 78 | 
                + model_name=model.model_name,  | 
            |
| 79 | 
                + code=model.code  | 
            |
| 80 | 
                + )  | 
            |
| 81 | 
                +  | 
            |
| 69 | 82 | 
                # 日销量统计  | 
            
| 70 | 83 | 
                ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(  | 
            
| 71 | 84 | 
                brand_id=brand.brand_id,  | 
            
                @@ -214,14 +227,33 @@ def exec_del_clerk_sale_submit(pk):  | 
            ||
| 214 | 227 | 
                @transaction.atomic  | 
            
| 215 | 228 | 
                def del_clerk_sale_submit_api(request):  | 
            
| 216 | 229 | 
                     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            
| 230 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 217 | 231 | 
                     pk = int(request.POST.get('pk', ''))
               | 
            
| 218 | 232 | 
                 | 
            
| 219 | 
                - exec_del_clerk_sale_submit(pk)  | 
            |
| 233 | 
                + if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():  | 
            |
| 234 | 
                + return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)  | 
            |
| 235 | 
                +  | 
            |
| 236 | 
                + exec_del_clerk_sale_submit(pk, admin_id)  | 
            |
| 220 | 237 | 
                 | 
            
| 221 | 238 | 
                return response(200, 'Del Success', u'删除成功')  | 
            
| 222 | 239 | 
                 | 
            
| 240 | 
                +@logit  | 
            |
| 241 | 
                +@transaction.atomic  | 
            |
| 242 | 
                +def batch_del_clerk_sale_submit_api(request):  | 
            |
| 243 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 244 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 245 | 
                +    pk = json.loads(request.POST.get('pks', []))
               | 
            |
| 246 | 
                +  | 
            |
| 247 | 
                + if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():  | 
            |
| 248 | 
                + return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)  | 
            |
| 223 | 249 | 
                 | 
            
| 224 | 
                -def exec_del_consumer_submit(pk):  | 
            |
| 250 | 
                + for pk in pks:  | 
            |
| 251 | 
                + exec_del_clerk_sale_submit(pk, admin_id)  | 
            |
| 252 | 
                +  | 
            |
| 253 | 
                + return response(200, 'Del Success', u'删除成功')  | 
            |
| 254 | 
                +  | 
            |
| 255 | 
                +  | 
            |
| 256 | 
                +def exec_del_consumer_submit(pk, admin_id):  | 
            |
| 225 | 257 | 
                try:  | 
            
| 226 | 258 | 
                ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk)  | 
            
| 227 | 259 | 
                except ConsumeInfoSubmitLogInfo.DoesNotExist:  | 
            
                @@ -254,6 +286,14 @@ def exec_del_consumer_submit(pk):  | 
            ||
| 254 | 286 | 
                user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id)  | 
            
| 255 | 287 | 
                except UserInfo.DoesNotExist:  | 
            
| 256 | 288 | 
                return response()  | 
            
| 289 | 
                +  | 
            |
| 290 | 
                + #记录删除日志  | 
            |
| 291 | 
                + StaffDeleteConsumerSubmitLogInfo.objects.create(  | 
            |
| 292 | 
                + admin_id=admin_id,  | 
            |
| 293 | 
                + log_pk=pk,  | 
            |
| 294 | 
                + model_name=model.model_name,  | 
            |
| 295 | 
                + code=model.code  | 
            |
| 296 | 
                + )  | 
            |
| 257 | 297 | 
                 | 
            
| 258 | 298 | 
                # 消除用户劵  | 
            
| 259 | 299 | 
                if user.shots_num <= 5:  | 
            
                @@ -437,8 +477,28 @@ def exec_del_consumer_submit(pk):  | 
            ||
| 437 | 477 | 
                @transaction.atomic  | 
            
| 438 | 478 | 
                def del_consumer_submit_api(request):  | 
            
| 439 | 479 | 
                     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            
| 480 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 440 | 481 | 
                     pk = int(request.POST.get('pk', ''))
               | 
            
| 441 | 482 | 
                 | 
            
| 442 | 
                - exec_del_consumer_submit(pk)  | 
            |
| 483 | 
                + if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():  | 
            |
| 484 | 
                + return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)  | 
            |
| 485 | 
                +  | 
            |
| 486 | 
                + exec_del_consumer_submit(pk, admin_id)  | 
            |
| 443 | 487 | 
                 | 
            
| 444 | 488 | 
                return response(200, 'Del Success', u'删除成功')  | 
            
| 489 | 
                +  | 
            |
| 490 | 
                +  | 
            |
| 491 | 
                +@logit  | 
            |
| 492 | 
                +@transaction.atomic  | 
            |
| 493 | 
                +def batch_del_consumer_submit_api(request):  | 
            |
| 494 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 495 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 496 | 
                +    pk = json.loads(request.POST.get('pks', []))
               | 
            |
| 497 | 
                +  | 
            |
| 498 | 
                + if not AdministratorInfo.objects.filter(admin_id=admin_id, admin_type=AdministratorInfo.MAINTENANCE, user_status=AdministratorInfo.ACTIVATED, status=True).exists():  | 
            |
| 499 | 
                + return response(AdministratorStatusCode.MAINTENANCE_NOT_FOUND)  | 
            |
| 500 | 
                +  | 
            |
| 501 | 
                + for pk in pks:  | 
            |
| 502 | 
                + exec_del_consumer_submit(pk, admin_id)  | 
            |
| 503 | 
                +  | 
            |
| 504 | 
                + return response(200, 'Del Success', u'删除成功')  | 
            
                @@ -2,11 +2,16 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from django.contrib import admin  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -from staff.models import StaffDeleteClerkSaleSubmitLogInfo  | 
            |
| 5 | 
                +from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerSubmitLogInfo  | 
            |
| 6 | 6 | 
                 | 
            
| 7 | 7 | 
                 | 
            
| 8 | 8 | 
                class StaffDeleteClerkSaleSubmitLogInfoAdmin(admin.ModelAdmin):  | 
            
| 9 | 
                -    list_display = ('username', 'code', 'status', 'created_at', 'updated_at')
               | 
            |
| 9 | 
                +    list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at')
               | 
            |
| 10 | 
                +  | 
            |
| 11 | 
                +class StaffDeleteConsumerSubmitLogInfoAdmin(admin.ModelAdmin):  | 
            |
| 12 | 
                +    list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at')
               | 
            |
| 10 | 13 | 
                 | 
            
| 11 | 14 | 
                 | 
            
| 12 | 15 | 
                admin.site.register(StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteClerkSaleSubmitLogInfoAdmin)  | 
            
| 16 | 
                +admin.site.register(StaffDeleteConsumerSubmitLogInfo, StaffDeleteConsumerSubmitLogInfoAdmin)  | 
            |
| 17 | 
                +  | 
            
                @@ -0,0 +1,51 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 1.11.26 on 2020-12-25 06:00  | 
            |
| 3 | 
                +from __future__ import unicode_literals  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.db import migrations, models  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class Migration(migrations.Migration):  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                + dependencies = [  | 
            |
| 11 | 
                +        ('staff', '0002_auto_20201130_0131'),
               | 
            |
| 12 | 
                + ]  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                + operations = [  | 
            |
| 15 | 
                + migrations.CreateModel(  | 
            |
| 16 | 
                + name='StaffDeleteConsumerSubmitLogInfo',  | 
            |
| 17 | 
                + fields=[  | 
            |
| 18 | 
                +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
               | 
            |
| 19 | 
                +                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
               | 
            |
| 20 | 
                +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
               | 
            |
| 21 | 
                +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
               | 
            |
| 22 | 
                +                ('admin_id', models.CharField(blank=True, db_index=True, help_text='\u7ba1\u7406\u5458ID', max_length=32, null=True, verbose_name='admin_id')),
               | 
            |
| 23 | 
                +                ('log_pk', models.CharField(blank=True, db_index=True, help_text='\u6d88\u8d39\u8005\u63d0\u4ea4\u8bb0\u5f55\u5173\u8054pk', max_length=32, null=True, verbose_name='log_pk')),
               | 
            |
| 24 | 
                +                ('model_name', models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7', max_length=32, null=True, verbose_name='model_name')),
               | 
            |
| 25 | 
                +                ('code', models.CharField(blank=True, db_index=True, help_text='\u673a\u8eab\u7801', max_length=32, null=True, verbose_name='code')),
               | 
            |
| 26 | 
                + ],  | 
            |
| 27 | 
                +            options={
               | 
            |
| 28 | 
                + 'verbose_name': 'StaffDeleteConsumerSubmitLogInfo',  | 
            |
| 29 | 
                + 'verbose_name_plural': 'StaffDeleteConsumerSubmitLogInfo',  | 
            |
| 30 | 
                + },  | 
            |
| 31 | 
                + ),  | 
            |
| 32 | 
                + migrations.RemoveField(  | 
            |
| 33 | 
                + model_name='staffdeleteclerksalesubmitloginfo',  | 
            |
| 34 | 
                + name='username',  | 
            |
| 35 | 
                + ),  | 
            |
| 36 | 
                + migrations.AddField(  | 
            |
| 37 | 
                + model_name='staffdeleteclerksalesubmitloginfo',  | 
            |
| 38 | 
                + name='admin_id',  | 
            |
| 39 | 
                + field=models.CharField(blank=True, db_index=True, help_text='\u7ba1\u7406\u5458ID', max_length=32, null=True, verbose_name='admin_id'),  | 
            |
| 40 | 
                + ),  | 
            |
| 41 | 
                + migrations.AddField(  | 
            |
| 42 | 
                + model_name='staffdeleteclerksalesubmitloginfo',  | 
            |
| 43 | 
                + name='log_pk',  | 
            |
| 44 | 
                + field=models.CharField(blank=True, db_index=True, help_text='\u9500\u552e\u5458\u63d0\u4ea4\u8bb0\u5f55\u5173\u8054pk', max_length=32, null=True, verbose_name='log_pk'),  | 
            |
| 45 | 
                + ),  | 
            |
| 46 | 
                + migrations.AddField(  | 
            |
| 47 | 
                + model_name='staffdeleteclerksalesubmitloginfo',  | 
            |
| 48 | 
                + name='model_name',  | 
            |
| 49 | 
                + field=models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7', max_length=32, null=True, verbose_name='model_name'),  | 
            |
| 50 | 
                + ),  | 
            |
| 51 | 
                + ]  | 
            
                @@ -6,7 +6,9 @@ from django_models_ext import BaseModelMixin  | 
            ||
| 6 | 6 | 
                 | 
            
| 7 | 7 | 
                 | 
            
| 8 | 8 | 
                class StaffDeleteClerkSaleSubmitLogInfo(BaseModelMixin):  | 
            
| 9 | 
                - username = models.CharField(_(u'username'), max_length=32, blank=True, null=True, help_text=u'用户名', db_index=True)  | 
            |
| 9 | 
                + admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员ID', db_index=True)  | 
            |
| 10 | 
                + log_pk = models.CharField(_(u'log_pk'), max_length=32, blank=True, null=True, help_text=u'销售员提交记录关联pk', db_index=True)  | 
            |
| 11 | 
                + model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号', db_index=True)  | 
            |
| 10 | 12 | 
                code = models.CharField(_(u'code'), max_length=32, blank=True, null=True, help_text=u'机身码', db_index=True)  | 
            
| 11 | 13 | 
                 | 
            
| 12 | 14 | 
                class Meta:  | 
            
                @@ -15,3 +17,16 @@ class StaffDeleteClerkSaleSubmitLogInfo(BaseModelMixin):  | 
            ||
| 15 | 17 | 
                 | 
            
| 16 | 18 | 
                def __unicode__(self):  | 
            
| 17 | 19 | 
                return '%d' % self.pk  | 
            
| 20 | 
                +  | 
            |
| 21 | 
                +class StaffDeleteConsumerSubmitLogInfo(BaseModelMixin):  | 
            |
| 22 | 
                + admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员ID', db_index=True)  | 
            |
| 23 | 
                + log_pk = models.CharField(_(u'log_pk'), max_length=32, blank=True, null=True, help_text=u'消费者提交记录关联pk', db_index=True)  | 
            |
| 24 | 
                + model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号', db_index=True)  | 
            |
| 25 | 
                + code = models.CharField(_(u'code'), max_length=32, blank=True, null=True, help_text=u'机身码', db_index=True)  | 
            |
| 26 | 
                +  | 
            |
| 27 | 
                + class Meta:  | 
            |
| 28 | 
                + verbose_name = _(u'StaffDeleteConsumerSubmitLogInfo')  | 
            |
| 29 | 
                + verbose_name_plural = _(u'StaffDeleteConsumerSubmitLogInfo')  | 
            |
| 30 | 
                +  | 
            |
| 31 | 
                + def __unicode__(self):  | 
            |
| 32 | 
                + return '%d' % self.pk  |